package com.hj.javase.comparator;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

/**
 * @Author : hujing
 * @Date: 2025/7/23 15:41
 * @Description:比较器的使用
 * 1.待比较的对象是需要实现了Comparable接口的类，或者是实现了Comparator接口的类。
 * 2.接收2个参数o1,o2,o1.compareTo(o2)方法，返回一个int值
 *   返回负数，则o1在o2前面；
 *   返回零，则o1和o2相等；（顺序不变）
 *   返回正数，则o1在o2后面
 */
public class ComparatorDemo {

    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        list.add(new Person("张三", 18));
        list.add(new Person("李四", 20));
        list.add(new Person("王五", 15));
        
        // 方式一，实现Comparator接口
        list.sort(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge() - o2.getAge();
            }
        });
        
        // 方式二，使用lambda表达式
        list.sort(Comparator.comparing(Person::getAge));

        System.out.println(list);
    }
}

class Person{
    String name;
    int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
